(function ($) {
    $.fn.serializeFormJSON = function () {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function () {
            if (o[this.name]) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    };

    var page = {
        init: function () {
            var that = this;

            that.reloadTable();

            $('#addObjForm').bootstrapValidator({
                message: "提交数据不能全部为空！",
                feedbackIcons: {
                    valid: 'mdi mdi-check',
                    invalid: 'mdi mdi-close',
                    validating: 'mdi mdi-refresh'
                },
                fields: {
                    userId: {
                        message: '用户Id校验失败！',
                        validators: {
                            notEmpty: {
                                message: '用户Id不能为空！'
                            },
                            stringLength: {
                                min: 6,
                                max: 12,
                                message: '用户Id长度必须在6到12位之间'
                            },
                            regexp: {
                                regexp: /^[a-zA-Z][a-zA-Z0-9_]*$/,
                                message: '用户Id必须以字母开头，只能包含大小写和数字'
                            }
                        }
                    }
                    , username: {
                        message: '用户名校验失败！',
                        validators: {
                            notEmpty: {
                                message: '用户名不能为空！'
                            },
                            stringLength: {
                                min: 6,
                                max: 12,
                                message: '用户名长度必须在6到12位之间'
                            },
                            regexp: {
                                regexp: /^[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9_\u4E00-\u9FA5]{5,15}$/,
                                message: '用户名只能以中文或字母开头,且由字母、数字、下划线和中文组成'
                            }
                        }
                    }, realName: {
                        message: '真实姓名校验失败！',
                        validators: {
                            notEmpty: {
                                message: '真实姓名不能为空！'
                            }
                        }
                    }, password: {
                        message: '密码校验失败！',
                        validators: {
                            identical: {
                                field: 'repassword',
                                message: '两次输入的密码不一致'
                            },
                            notEmpty: {
                                message: '密码不能为空！'
                            },
                            stringLength: {
                                min: 6,
                                max: 12,
                                message: '密码长度必须在6到12位之间！'
                            }
                            // ,regexp:{
                            //     regexp:/^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)(?![a-zA-z\d]+$)(?![a-zA-z!@#$%^&*]+$)(?![\d!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$/,
                            //     message:'密码必须由大写字母小写字母和字符共同组成'
                            // }
                        }
                    }, repassword: {
                        message: '密码校验失败！',
                        validators: {
                            identical: {
                                field: 'password',
                                message: '两次输入的密码不一致'
                            },
                            notEmpty: {
                                message: '密码不能为空！'
                            },
                            stringLength: {
                                min: 6,
                                max: 12,
                                message: '密码长度必须在6到12位之间！'
                            }
                            // ,regexp:{
                            //     regexp:/^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)(?![a-zA-z\d]+$)(?![a-zA-z!@#$%^&*]+$)(?![\d!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$/,
                            //     message:'密码必须由大写字母小写字母和字符共同组成'
                            // }
                        }
                    }
                }
            }).on('error.field.bv', function (e, data) {
                //‘用户确认密码’ 没输入的时候，‘用户新密码’不提示‘用户新密码与确认密码不一致’
                if (data.field == 'password') {
                    var len2 = $('#repassword').val().length;
                    if (len2 == 0) {
                        var $parent = data.element.parents('.form-group');
                        $parent.removeClass('has-error');
                        $parent.find('.form-control-feedback[data-bv-icon-for="' + data.field + '"]').hide();
                        data.element.siblings('[data-bv-validator="identical"]').hide();
                    }
                }
            });

            $('#btn_add').click(function () {
                $('#addObjModal').modal('show');
            });

            $('#btn_edit').click(function () {
                var selRows = $("#tb_base").bootstrapTable('getSelections');
                if (selRows.length == 0) {
                    layer.msg("请至少选择一行数据");
                    return false;
                } else {
                    $('#updateObjModal').modal('show');
                }
            });

            $('#btn_delete').on('click', function () {

                var selRows = $("#tb_base").bootstrapTable('getSelections');

                if (selRows.length == 0) {
                    layer.msg("请至少选择一行");
                    return false;
                }
                console.log(selRows);

                var postData = "";
                $.each(selRows, function (i) {
                    postData += this.id;
                    if (i < selRows.length - 1) {
                        postData += ",";
                    }
                });

                $.confirm({
                    title: '删除确认',
                    content: '请注意删除会同时清空用户与角色绑定关系，确定删除编号为[ ' + postData + ' ]的用户？！',
                    buttons: {
                        confirm: {
                            text: '确定删除',
                            btnClass: 'btn btn-danger',
                            action: function () {
                                $.ajax({
                                    type: "delete",
                                    url: "/users/batch",
                                    cache: false,
                                    data: {'ids': postData},
                                    dataType: "json",
                                    contentType: 'application/x-www-form-urlencoded',
                                    success: function (data) {
                                        if (data.code == "0") {
                                            // 正确的其他处理...
                                            layer.msg(data.msg, {icon: 6});
                                            $("#tb_base").bootstrapTable('refresh');

                                        } else {
                                            // 错误的其他处理...
                                            layer.msg(data.msg, {icon: 5});
                                            $("#tb_base").bootstrapTable('refresh');
                                        }
                                    },
                                    error: function (E) {
                                        console.log(E);
                                        layer.msg('提交系统失败，请稍后再试', {icon: 2});
                                    }
                                });
                            }
                        },
                        cancel: {
                            text: '取消',
                            btnClass: 'btn btn-secondary',
                            action: function () {
                                // $.alert('取消!');
                            }
                        }
                    }
                });

            });

            // 钩子
            $('#addObjModal').on('show.bs.modal', function (event) {
                var button = $(event.relatedTarget);
                var modal = $(this);
                $("#addObjForm input").val("");
            });

            $('#addObjModal').on('hide.bs.modal', function (event) {
                $('#addObjForm').bootstrapValidator('resetForm');
            });

            $('#updateObjModal').on('show.bs.modal', function (event) {
                var button = $(event.relatedTarget);
                var modal = $(this);
                var selRows = $("#tb_base").bootstrapTable('getSelections');
                console.log(selRows);

                modal.find('input[name="id"]').val(selRows[0].id);
                modal.find('input[name="userId"]').val(selRows[0].userId);
                modal.find('input[name="username"]').val(selRows[0].username);
                modal.find('input[name="realName"]').val(selRows[0].realName);
                modal.find('input[name="email"]').val(selRows[0].email);
            });

            $('.add-obj-btn').on('click', function () {

                var flag = $('#addObjForm').data("bootstrapValidator").isValid();
                if (!flag) {
                    layer.msg("填写不正确，请修改正确后提交");
                    return false;
                }

                // var data = $('#defaultForm').serialize(); // 类似get的url拼参数方式，需要转换json
                var data = $('#addObjForm').serializeFormJSON();
                console.log(data);

                $.ajax({
                    type: "post",
                    url: "/users",
                    cache: false,
                    data: JSON.stringify(data),
                    dataType: "json",
                    contentType: 'application/json;charset=utf-8',
                    success: function (data) {
                        if (data.code == "0") {
                            // 正确的其他处理...
                            layer.msg(data.msg, {icon: 6});
                            $("#tb_base").bootstrapTable('refresh');
                            $('#addObjModal').modal('hide');
                        } else {
                            // 错误的其他处理...
                            layer.msg(data.msg, {icon: 5});
                            $("#tb_base").bootstrapTable('refresh');
                        }
                    },
                    error: function (E) {
                        console.log(E);
                        layer.msg('提交系统失败，请稍后再试', {icon: 2});
                    }
                });
            });

            $('.update-obj-btn').on('click', function () {
                // var data = $('#defaultForm').serialize(); // 类似get的url拼参数方式，需要转换json
                var data = $('#updateObjForm').serializeFormJSON();
                console.log(data);

                $.ajax({
                    type: "put",
                    url: "/users",
                    cache: false,
                    data: JSON.stringify(data),
                    dataType: "json",
                    contentType: 'application/json;charset=utf-8',
                    success: function (data) {
                        if (data.code == "0") {
                            // 正确的其他处理...
                            layer.msg(data.msg, {icon: 6});
                            $("#tb_base").bootstrapTable('refresh');
                            $('#updateObjModal').modal('hide');
                        } else {
                            // 错误的其他处理...
                            layer.msg(data.msg, {icon: 5});
                            $("#tb_base").bootstrapTable('refresh');
                        }
                    },
                    error: function (E) {
                        console.log(E);
                        layer.msg('提交系统失败，请稍后再试', {icon: 2});
                    }
                });
            });


        },
        reloadTable: function () {
            $('#tb_base').bootstrapTable({
                classes: 'table table-bordered table-hover table-striped',
                url: '/users',
                method: 'get',
                // dataType: 'jsonp',        // 因为本示例中是跨域的调用,所以涉及到ajax都采用jsonp,
                uniqueId: 'id',
                idField: 'id',             // 每行的唯一标识字段
                toolbar: '#toolbar',       // 工具按钮容器
                //clickToSelect: true,     // 是否启用点击选中行
                showColumns: true,         // 是否显示所有的列
                showRefresh: true,         // 是否显示刷新按钮
                showToggle: true,        // 是否显示详细视图和列表视图的切换按钮(clickToSelect同时设置为true时点击会报错)
                pagination: true,                    // 是否显示分页
                sortOrder: "asc",                    // 排序方式
                queryParams: function (params) {
                    var temp = {
                        limit: params.limit,
                        offset: params.offset,
                        pageSize: params.limit,   //页面大小
                        pageNum: (params.offset / params.limit) + 1,  //页码
                        isAsc: params.order,          // 排序方式'asc' 'desc'
                        orderByColumn: params.sort  // 排序的列名
                    };
                    return temp;
                },                                   // 传递参数
                sidePagination: "server",            // 分页方式：client客户端分页，server服务端分页
                pageNumber: 1,                       // 初始化加载第一页，默认第一页
                pageSize: 10,                        // 每页的记录行数
                pageList: [5, 10, 25, 50, 100],         // 可供选择的每页的行数
                //search: true,                      // 是否显示表格搜索，此搜索是客户端搜索
                //showExport: true,        // 是否显示导出按钮, 导出功能需要导出插件支持(tableexport.min.js)
                //exportDataType: "basic", // 导出数据类型, 'basic':当前页, 'all':所有数据, 'selected':选中的数据

                columns: [{
                    checkbox: true
                }, {
                    title: '序号',
                    align: 'center',
                    formatter: function (value, row, index) {
                        return index + 1;
                    }
                }, {
                    field: 'id',
                    align: 'center',
                    visible: false, // false不显示
                    title: '用户编号'
                }, {
                    field: 'userId',
                    title: '用户ID'
                }, {
                    field: 'username',
                    title: '用户名称'
                }, {
                    field: 'password',
                    visible: false, // false不显示
                    title: '用户密码'
                }, {
                    field: 'realName',
                    title: '用户姓名'
                }, {
                    field: 'status',
                    align: 'center',
                    title: '状态',
                    formatter: function (value, row, index) {
                        if (value == 1) {
                            return '<b class="text-success">正常</b>';
                        } else {
                            return '<b class="text-warning">锁定</b>';
                        }
                    }
                }, {
                    field: 'headUrl',
                    title: '用户头像'
                }, {
                    field: 'gender',
                    title: '性别'
                }, {
                    field: 'email',
                    title: '邮箱'
                }, {
                    field: 'superAdmin',
                    title: '是否管理员'
                }, {
                    field: 'lastLoginDate',
                    title: '最后登录时间'
                }, {
                    field: 'creator',
                    visible: false, // false不显示
                    title: '创建者'
                }, {
                    field: 'createDate',
                    visible: false, // false不显示
                    title: '创建时间'
                }, {
                    field: 'updater',
                    title: '最近更改者'
                }, {
                    field: 'updateDate',
                    visible: false, // false不显示
                    title: '最近更改时间'
                }],
                onLoadSuccess: function (data) {
                    $("[data-toggle='tooltip']").tooltip();
                }
            });
        }
    };

    page.init();

})(jQuery);

